package com.sisgesbyte.dao.tecnico;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;

import com.sisgesbyte.dao.beanDao.FiltrosBean;
import com.sisgesbyte.dao.beanDao.FiltrosSQLBean;

public class Probando {

	public static void main(String[] args) {

		FiltrosSQLBean filtrosSql = new FiltrosSQLBean();
		List<FiltrosBean> listaFiltros = new ArrayList<FiltrosBean>();
		List<Object> valores = new ArrayList<Object>();
		String campoOrden = "navegador";
		String tipoOrden = "desc";
		String var1 = "aaaa";
		String var2 = "bbbb";

		FiltrosBean filtro = new FiltrosBean();
		List<String> cam = new ArrayList<String>();
		cam.add("cod_transaccion");
		filtro.setCampos(cam);
		filtro.setOperador("=");
		filtro.setNumeroValores(1);
		listaFiltros.add(filtro);

		FiltrosBean filtro2 = new FiltrosBean();
		List<String> cam2 = new ArrayList<String>();
		cam2.add("fecha_acceso");
		filtro2.setCampos(cam2);
		filtro2.setOperador("between");
		filtro2.setNumeroValores(2);
		listaFiltros.add(filtro2);

		FiltrosBean filtro3 = new FiltrosBean();
		List<String> cam3 = new ArrayList<String>();
		cam3.add("tipo_host");
		cam3.add("navegador");
		filtro3.setCampos(cam3);
		filtro3.setOperador("like");
		listaFiltros.add(filtro3);

		FiltrosBean filtro4 = new FiltrosBean();
		List<String> cam4 = new ArrayList<String>();
		cam4.add("ciudad");
		filtro4.setCampos(cam4);
		filtro4.setOperador("IN");
		filtro4.setNumeroValores(4);
		listaFiltros.add(filtro4);

		FiltrosBean filtro5 = new FiltrosBean();
		List<String> cam5 = new ArrayList<String>();
		cam5.add("fecha_mes");
		filtro5.setCampos(cam5);
		filtro5.setOperador("fecha2");
		filtro5.setNumeroValores(1);
		listaFiltros.add(filtro5);

		valores.add("XOw4WoXxiG6Az48MgHiRL1gs");
		valores.add("2014-08-25");
		valores.add("2014-08-26");
		valores.add("PC");
		valores.add("Lima");
		valores.add("Chiclayo");
		valores.add("Trujillo");
		valores.add("Piura");
		valores.add("2013-08");
		valores.add(4);
		valores.add(7);

		filtrosSql.setListaFiltros(listaFiltros);
		filtrosSql.setListaValores(valores);
		filtrosSql.setCampoOrden(campoOrden);
		filtrosSql.setTipoOrden(tipoOrden);
		filtrosSql.setLimiteFilas(true);
		filtrosSql.setFilaInicio(true);

		List<String> ls = new ArrayList<String>();
		ls.add("1");
		ls.add("2");
		ls.add("3");
		ls.add("4");
		ls.add("45");

		System.out.println((String) ("var" + "1"));
		int i = 1;
		// System.out.println(++i);
		// // System.out.println(ls.get(0));
		// // System.out.println(concatenar(filtrosSql));
		// System.out.println(BigDecimal.ZERO);

		// BigDecimal k=BigDecimal.ZERO;
		// for (int j = 0; j < 18; j++) {
		// k = k.add(new BigDecimal(j));
		// System.out.println(k);
		// }

		StringBuilder jpql = new StringBuilder();

		jpql.append("david,");
		jpql.append("jose,");
		jpql.append("manuel,");

		// System.out.println(jpql.substring(0, jpql.length()-1));
		//
		// System.out.println(jpql.toString());

		// create 2 BigDecimal objects
		BigDecimal bg1, bg2;

		bg1 = new BigDecimal("0.6");
		bg2 = new BigDecimal("1");

		// create int object
		int res;

		res = bg1.compareTo(bg2); // compare bg1 with bg2

		String str1 = "Both values are equal ";
		String str2 = "First Value is greater ";
		String str3 = "Second value is greater";

//		if (res == 0)
//			System.out.println(str1);
//		else if (res == 1)
//			System.out.println(str2);
//		else if (res == -1)
//			System.out.println(str3);
		
		if(bg1.compareTo(bg2) == -1){
			System.out.println("1111");
		}else{
			System.out.println("222");
		}
	}

	public static String concatenar(FiltrosSQLBean filtrosSql) {

		StringBuilder jpql = new StringBuilder();
		StringBuilder sql = new StringBuilder();
		jpql.append("where ");
		int i = 0;
		if (filtrosSql.getListaFiltros() != null
				&& filtrosSql.getListaFiltros().size() > 0) {
			for (FiltrosBean ls : filtrosSql.getListaFiltros()) {
				if (ls.getOperador().equalsIgnoreCase("=")) {
					for (String campos : ls.getCampos()) {
						jpql.append(campos.toLowerCase());
						jpql.append(" = ");
						jpql.append("?");
						jpql.append(++i);
						jpql.append(" and ");
					}
				}
				if (ls.getOperador().equalsIgnoreCase("in")) {
					for (String campos : ls.getCampos()) {
						jpql.append(campos.toLowerCase());
						jpql.append(" in ");
						jpql.append(" ( ");
						StringBuilder colum = new StringBuilder();
						for (int j = 0; j < ls.getNumeroValores(); j++) {
							colum.append("?");
							colum.append(++i);
							colum.append(",");
						}
						jpql.append(colum.toString().substring(0,
								colum.length() - 1));
						jpql.append(" ) ");
					}
					jpql.append(" and ");
				}
				if (ls.getOperador().equalsIgnoreCase("between")) {
					for (String campos : ls.getCampos()) {
						jpql.append(campos.toLowerCase());
						jpql.append(" between ");
						jpql.append(" ?");
						jpql.append(++i);
						jpql.append(" and ");
						jpql.append(" ?");
						jpql.append(++i);
					}
					jpql.append(" and ");
				}
				if (ls.getOperador().equalsIgnoreCase("like")) {

					StringBuilder colum = new StringBuilder();
					jpql.append(" concat(");

					for (String campos : ls.getCampos()) {
						colum.append(campos.toLowerCase());
						colum.append(",");
					}
					jpql.append(colum.toString().substring(0,
							colum.length() - 1));
					jpql.append(") ");
					jpql.append(" ilike ");
					jpql.append(" %");
					jpql.append("?");
					jpql.append(++i);
					jpql.append("% ");
					jpql.append(" and ");

				}
				// fecha por año
				if (ls.getOperador().equalsIgnoreCase("fecha1")) {
					jpql.append(" TO_CHAR(");
					for (String campos : ls.getCampos()) {
						jpql.append(campos.toLowerCase());
						jpql.append(",");
						jpql.append("YYYY");
					}
					jpql.append(") ");
					jpql.append(" = ");
					jpql.append("?");
					jpql.append(++i);
					jpql.append(" and ");
				}
				// fecha por año y mes
				if (ls.getOperador().equalsIgnoreCase("fecha2")) {
					jpql.append(" TO_CHAR(");
					for (String campos : ls.getCampos()) {
						jpql.append(campos.toLowerCase());
						jpql.append(",");
						jpql.append("YYYY-MM");
					}
					jpql.append(") ");
					jpql.append(" = ");
					jpql.append("?");
					jpql.append(++i);
					jpql.append(" and ");
				}
				// fecha por año y mes
				if (ls.getOperador().equalsIgnoreCase("fecha3")) {
					jpql.append(" TO_CHAR(");
					for (String campos : ls.getCampos()) {
						jpql.append(campos.toLowerCase());
						jpql.append(",");
						jpql.append("YYYY-MM-dd");
					}
					jpql.append(") ");
					jpql.append(" = ");
					jpql.append("?");
					jpql.append(++i);
					jpql.append(" and ");
				}
			}
			sql.append(jpql.toString().substring(0, jpql.length() - 4));
		}

		if (filtrosSql.getCampoOrden() != null
				&& filtrosSql.getCampoOrden().length() > 0) {
			StringBuilder orden = new StringBuilder();
			orden.append(" order by ");
			orden.append(filtrosSql.getCampoOrden());
			orden.append(" ");
			orden.append(filtrosSql.getTipoOrden());
			sql.append(orden.toString());
		}

		if (filtrosSql.getLimiteFilas() != null
				&& filtrosSql.getLimiteFilas() == true) {
			StringBuilder limites = new StringBuilder();
			limites.append(" limit ");
			limites.append("?");
			limites.append(++i);
			if (filtrosSql.getFilaInicio() != null
					&& filtrosSql.getFilaInicio() == true) {
				limites.append(" offset ");
				limites.append("?");
				limites.append(++i);
			}
			sql.append(limites.toString());
		}

		return sql.toString();
	}
}
